ValueObject
Un Value Object (VO) est un objet qui :
- n’a pas d’identité propre
- est défini uniquement par sa valeur
- est immuable
- garantit des invariants métier
👉 En DDD : “Deux Value Objects avec la même valeur sont égaux.”
Exemple
Déclaration
Dans un package,déclarer Value Object dans src/Domain/ValueObject/Email.php
<?php
declare(strict_types=1);
namespace AnisSaied\UserCore\Domain\ValueObject;
/**
* Email
*
* Value Object garantissant la validité d'une adresse email.
*/
final class Email
{
private string $value;
public function __construct(string $email)
{
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new \InvalidArgumentException('Invalid email address.');
}
$this->value = strtolower($email);
}
public function value(): string
{
return $this->value;
}
public function equals(Email $other): bool
{
return $this->value === $other->value;
}
}
utilisation
$email1 = new Email('anis@example.com');
$email2 = new Email('anis@example.com');
$email1->equals($email2); // true
Même valeur ⇒ même signification métier.
Sans ValueObject
function register(string $email) { }
Problèmes :
- email invalide possible
- duplication de validation
- logique métier dispersée
Avec ValueObject :
function register(string $email) { }
Avantages :
- validation centralisée
- code plus expressif
- erreurs détectées tôt
- meilleur typage